home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-01-10 | 48.5 KB | 1,584 lines |
- Work-around:
- At the D: prompt invoke CLIPPER with the following syntax:
- CLIPPER filename #DF=C:
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: AUTUMN RESERVED WORDS
- TEXT:
-
- The following list of RESERVED WORDS is for the AUTUMN '86 version
- of CLIPPER.
-
- ALLMEM ATOF AUTUMN86
- BLDMEM CHGFC CHKUFB
- CXA55 CXA_55 CXC33
- CXC55 CXC88 CXC_55
- CXD22 CXD33 CXD55
- CXDVT CXD_55 CXFDIV
- CXFERR CXFMUL CXFNM5
- CXFNM5A CXFXT5 CXFXT5A
- CXINIT CXLSH CXM22
- CXM33 CXM55 CXMAT
- CXMVT CXM_55 CXN5
- CXNDP0 CXNDP1 CXNDP2
- CXNDP3 CXNDPH CXNDPL
- CXNDPX CXNM8 CXRSH
- CXS55 CXSERR CXSERZ
- CXS_55 CXT5 CXV25
- CXV35 CXV50 CXV51
- CXV53 CXVDF CXVFD
- DCLOSE DCREAT DCREATX
- DOPEN DREAD DSEEK
- DUNIQUE DWRITE ENVIRON
- ERRNO EXCEPT EXP
- FABS FMOD FREXP
- GETFC GETMEM GETML
- ISSPACE LDEXP LOG
- LOG10 LSBRK LSEEK
- MATHERR MODF MOVMEM
- NETERR OPEN PCNGMN
- POW POW2 RBRK
- READ REMOVE RENAME
- RLOCK RLSMEM RLSML
- RSTMEM RUNLK SBRK
- SETMEM SIZMEM SQRT
- STBCPY STCCPY STPBLK
- STPCHR STPCPY STRCAT
- STRCMP STRCPY STRLEN
- STRNCAT STRNCMP STRNCPY
- STSCMP UNLINK WRITE
- XCABT
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: WINTER RESERVED WORDS
- TEXT:
-
- The following list of RESERVED WORDS is for the WINTER'85 version
- of CLIPPER. As of this version of CLIPPER, words beginning with an
- underscore are not allowed; therefore, they are not included in this
- list.
-
- $STRT$ ALLMEM ATOF
- BDOS BLDMEM CLOSE
- CREAT CXA38 CXA55
- CXA_55 CXC33 CXC55
- CXC88 CXC_55 CXD33
- CXD55 CXD_55 CXFER
- CXFNM4 CXFNM5 CXFXT4
- CXFXT5 CXM33 CXM55
- CXM_55 CXN5 CXNDPB
- CXNDPH CXNDPL CXNM8
- CXS55 CXS88 CXS_55
- CXT5 CXV05 CXV25
- CXV35 CXV45 CXV50
- CXV52 CXV53 CXV54
- CXV83 CXVDF CXVFD
- CXV_45 CXV_54 ERRNO
- EXCEPT EXIT EXP
- FABS FCLOSE FMOD
- FOPEN FORKL FORKLP
- FORKV FORKVP FREOPEN
- FREXP GETENV GETMEM
- GETML IEXEC LDEXP
- LOG LOG10 LSBRK
- LSEEK MATHERR MKEXT
- MKNAME MODF MOVMEM
- OPEN POW POW2
- RBRK READ REMOVE
- RENAME RLSMEM RLSML
- RSTMEM SBRK SETMEM
- SIZMEM SQRT STBCPY
- STCCPY STCD_I STCIS
- STCISN STCI_D STCU_D
- STPBLK STPCHR STPCPY
- STRCAT STRCMP STRCPY
- STRCSPN STRLEN STRNCAT
- STRNCMP STRNCPY STRSPN
- STSCMP SYSTEM UNLINK
- WAIT WINTER85 WRITE
- XCEXIT XCOVF
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: FLASHCODE WITH CLIPPER
- TEXT:
- A few callers have reported that programs that were linked
- with FLASHCODE were generating 'System error memory fault'.
- This was because of FLCLIP.OBJ. Call SOFTWARE BOTTLING
- COMPANY to get an upgrade to this program called FWCLIP.OBJ.
- The number is (718)458-3700.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: <ESC>
- TEXT:
- When <ESC> is hit in a screen of GETs with only one READ,
- CLIPPER will save the contents of the GETs prior to the <ESC>.
- dBASE will not save any of the GETS.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DEBUGGER
- TEXT:
- When using the "M" option to list PRIVATE variables, some of the
- variables will display a type @ . This means that the variable
- is a PARAMETER passed to that procedure. The @ sign is a
- reference symbol. Use the "E" option to display the contents
- of the variable.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: 80287 MATH CHIP
- TEXT:
- The 80287 MATH CHIP is not supported as of the WINTER 85
- version of CLIPPER. This is because the version of LATTICE C
- used does not recognize it. It IS supported in AUTUMN '86.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TYPE CONFLICT IN +
- TEXT:
- A TYPE CONFLICT IN + can occur when using a .FRM file that
- has a Y in the TOTALS? column on a character field. CLIPPER's
- Report utility will accept a Y in the TOTALS? column. Also,
- dBASE will keep a Y when changing a field's contents from a
- numeric to a character.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TYPE CONFLICT IN =
- TEXT:
- May occur when using a SET KEY TO without a PARAMETERS
- statement in the 'SET KEY - procedure'. The error usually
- happens on the 11th time that the key is pressed.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TYPE CONFLICT IN ACCUM
- TEXT:
- Has occurred when returning from a UDF that has a RETURN
- statement without a returning value.
-
- Example: FUNCTION funcname
- PARAMETERS a
- --source code--
- RETURN && no value is retuned
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SYSTEM ERROR - STACK UNDERFLOW
- TEXT:
- This message indicates that you are doing some type of
- transaction which makes use of more parameters than are
- available.
-
- Examples:
-
- 1) ? chr(n), && The comma implies another parameter should
- * be printed resulting in the error.
- 2) DO prog a,b && Two parameters are being passed to
- --source code--- && prog, but three parameters are
- PROCEDURE prog && being received.
- PARAMETES a,b,c
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SYSTEM ERROR MEMORY FAULT
- TEXT:
- Has occurred as a result of a negative constants number after
- compiling.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: PROGRAM TOO BIG TO FIT IN MEMORARY
- TEXT:
- 1) This error can happen when the mother-board is set for 640K
- while the expansion board is set for 256K RAM.
-
- 2) Can happen if PLINK86 was incorrecty copied (i.e. bad sector).
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INDEX ERROR READ/WRITE
- TEXT:
- 1) This error can happen when the mother-board is set for 640K
- while the expansion board is set for 256K RAM.
-
- 2) Will happen when the disk is full.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INDEX ERROR _NTX SET
- TEXT:
- Can happen when REPLACing a field in work area one while in
- work area two. This is allowed in AUTUMN '86.
-
- Example:
- SELECT 1
- USE file_one
- SELECT 2
- USE file_two
- REPLACE 1->field_name WITH 2->field_name
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DOS ERROR 2
- TEXT:
- Has occured when trying to RESTORE FROM a .MEM file in a
- program that had a negative constants number after compiling.
- This situation is unique to WINTER '85.
-
-
-
- PUBLISHED: 16 Dec 1986
-
-
- Screen 14
-
- MAIN_TOPICS: DOS ERROR 0
- TEXT:
- DOS ERROR 0 is not a DOS error. When an internal runtime error
- occurs that CLIPPER cannot identify, it goes out to DOS to
- check as to whether it is a DOS problem. If it cannot find the
- DOS error ( and its associated number) it assigns a '0' to an
- internal CLIPPER memory variable that is used in our error
- messages. A DOS ERROR 0 usually occurs when indexing or
- reporting. This error is unique to WINTER '85.
- The following is a list of possible reasons for this error:
-
- 1) When the constants number after compiling is a negative
- number.
-
- 2) When a program attempts to SET FORMAT TO a format file
- with the same name as the calling program.
-
- 3) When not ending a program with a RETURN while using
- WORDSTAR editor.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: FATAL AT LINE-NUMBER UNEXPECTED EOF
- TEXT:
-
- This compiler error can occur when the hard disk runs out of
- disk space while compiling.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: CLIPPER -L
- TEXT:
-
- When using the "Enhanced Native Code" option '-l', the line
- number passed in the F1 HELP program or a SET KEY TO procedure
- will be erroneous. The line number will be 4068 which is a
- line in the library.
- Also, the DEBUGGER will not work properly when setting
- breakpoints.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: &&
- TEXT:
-
- If a line begins with the double ampersand (&&) used as a comment
- CLIPPER will stop compiling on this line without issuing an error
- message. This comment should only be used at the end of a command
- line.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: FATAL ERROR 57 - UNDEFINED $OVLYM
- TEXT:
-
- Will occur when the "OVERLAY PROG,..." statement is issued
- after a "ENDAREA" statement.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: PLINK86
- TEXT:
-
- PLINK86 will lose track of the directory that the overlay
- library is in if it is different than the default. This can be
- resolved by creating an OBJ variable in DOS that contains the
- path of the objs and lib files to be linked.
- Example: SET OBJ=C:\CLIP\
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: MS ASSEMBLER LINKER
- TEXT:
-
- When using MICROSOFT ASSEMBLER LINKER, you must change the
- default setting of segments. The default is 128; however,
- you can reset the number of segments up to 1024.
-
- EX. Syntax: LINK <filename>/SE:1024,,,;
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION
- TEXT:
-
- If Clipper has been installed on the C:drive, and a second
- physical hard drive (D:) is added to the system, invoking
- CLIPPER from the D:drive may return the error:
- "error 0013 - product has been uninstalled"
- even if the path has been set. What to do?
- A: at the D:drive, invoke Clipper with the command:
-
- CLIPPER f #DF=x:
- where:
- - f = file to be
- compiled
- - x = drive where Clipper is
-
- - therefore, to compile FILE.PRG from the D:drive with Clipper
- installed in the C:drive, issue the following command at the
- D> prompt:
- CLIPPER FILE #DF=C:
-
-
- - note: may also happen with "partitioned" disks
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: HIGH DENSITY
- TEXT:
-
- HIGH DENSITY DISKETTES - Users who are installing a floppy
- working copy must use a formatted, double sided, double density
- diskette as the target disk. The messages, "Install terminated
- Error Code 6100 or 8304 " will be displayed if the target
- diskette is high capacity (1.2 Mb).
-
- HIGH DENSITY DRIVES - Any floppy disk made in or written to in
- the high capacity drive may be unusable on a regular disk drive.
- With this in mind, if the distribution disk will be used to
- install on machines with regular drives, run INSTALL from the
- low density drive. If the working copy is to be used on
- regular drives in addition to high density drives, make the
- working copy in a low density drive. If the IBM AT has only
- one low density drive, use it for a one drive install
- specifying that drive letter for both Product and Target disks.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: THYSYS FASTCARD
- TEXT:
-
- When using THYSYS FASTCARD be sure to turn the cash buffer off;
- otherwise, you will get an installation error #120. With the
- cash buffer on, SUPERLoCK thinks it is trying to copy to a RAM
- disk.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION
- TEXT:
-
- The version of SUPERLoK (2.0.3) that we use on CLIPPER supports
- the Televideo IBM compatibles, including the portable TCB2.
- The TCB2, however, has undergone various changes in its EPROM
- and only releases D and higher are supported. How, you ask,
- does a customer know if he has the wrong EPROM ? Well, that's
- probably why he's calling us in the first place - 'cause it
- dosn't install. Advise the customer to call Televideo Tech
- Support. The numbers are:
- In CA: 1-800-821-3774
- Outside CA: 1-800-521-4897
-
- They will arrange for him to receive a free upgraded EPROM and
- then his installation problems will be over.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION
- TEXT:
-
- SUPERLoK does not want to install on a two drive
- A.C.T EXTURBO (P.C.clone). In fact, in some cases
- it will completly trash your CLIPPER disk.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: ROUTINE BACKUPS
- TEXT:
-
- Users who do routine daily or weekly backups of their hard
- disks do not have to use the UNInstall command. If they are
- unsure if they are restoring the root directory then use the
- "/p" option on the DOS RESTORE command when and if a RESTORE
- becomes necessary. Reply N if any attempts are made to restore
- "read-only" files. In this way protected programs will never
- become unauthorized. The "/p" option of the RESTORE command
- will not harm anything even if it is not nesessary. Some
- marketers of third party backup/restore programs have made
- changes to their program so that the "/p" is not required.
- The only special consideration when using these programs
- is to UNInstall if you plan to reformat your hard disk.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: SUPERLOK UNINSTALL
- TEXT:
-
- When to use the SUPERLoK UNInstall:
-
- 1. If for some reason you need to reformat your hard disk.
- For instance you are having some type of problem which
- requires removal, repair or you need to re-partition the
- disk then you need to UNInstall the SUPERLoK protected
- products. Formatting a hard disk will unauthorize
- protected products and will cause you to loose an
- "install count" unless you UNInstall first. This is
- unfortunate but necessary to prevent unauthorized copies
- from easily being transferred to other hard disks. If
- you know that you will be reformatting, then:
-
- a) UNInstall the protected products.
- b) Do a full BACKUP of the hard disk.
- c) Do the re-formatting or whatever is necessary.
- d) RESTORE the entire hard disk ("/p" not required).
- e) Re-Install the protected products.
-
- 2. If you want to move the protected software from the hard
- disk on one computer to the hard disk of another computer
- then it is necessary to use the SUPERLoK UNInstall and
- Install procedures. In this way you will never have more
- than one authorized copy at a time.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: BACKUP, RESTORE
- TEXT:
-
- SUPERLoK 2.0.3 Backup / Restore Considerations
-
- With version 2.0.3 of Softgaurd's SUPERLoK protection system
- additional ease-of-use features were incorporated into the hard
- disk protection. When SUPERLoK protected software is installed
- to any hard disk directory the floppy "key" disk is not required
- for execution. The software remains protected on the hard disk.
- SUPERLoK protection is designed to prevent the unauthorized
- transfer of the protected software from one hard disk to
- another.
- The SUPERLoK UNINSTALL feature allows the user to remove the
- protected software from the hard disk in a controlled manner.
-
- With regard to backing up or restoring a hard disk which
- contains SUPERLoK 2.0.3 protected sofware the following should
- be noted:
-
- The DOS BACKUP (or similar backup's from other vendors) may
- be used freely and can never have any adverse effect on the
- protected software.
-
- Users may freely copy the protected software from one sub-
- directory to another on the same hard disk with no
- restrictions. The protected software may be executed from
- any hard disk directory.
-
- The only restrictions have to do with RESTORING a hard disk.
- To be more specific, only when the root directory is to be
- restored (which would include the case when a full 10MB or
- 20MB restore is being done) must the user do anything
- different from the way unprotected software would be
- handled. When restoring the root directory you must use
- the "/p" option on the DOS RESTORE command. This option
- will prompt the user each time it attempts to restore
- a "read-only' file. The user should reply N to the request.
- In this way the protected products will remain authorized.
- Note the following examples which should make this more
- clear:
-
- a) If the protected
- product has been installed in some
- directory other than the root directory then this
- directory may be freely backed up and restored just
- as you would if the software were not protected.
-
- b) The protected program and its related files may be
-
- backed up and restored even to the root directory
- with no restrictions if specific file names are used.
- Remember that it is only a full root directory restore
- that requires the "/p" option on the DOS RESTORE command.
-
- c) If a streaming tape is being used to do the backup/restore
- operation then the only special consideration revolves
- around the root derectory of the hard disk. If you need to
- restore the root directory with a streaming tape, then
- restore the full hard disk. If only a file restore or a
- sub-directory is being restored, then there are no
- restrictions.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INSTALLATION: SUPERLOK
- TEXT:
-
- Computers supported by SUPERLoK 2.0.3a
-
- IBM PC, XT, AT, Portable, 3270
- AT&T PC-6300
- Columbia 1600 VP
- COMPAQ Portable, Plus, Deskpro, and 286
- Corona (may have problems with models made before March 1984)
- Ericsson PC and Portable PC
- HP Vectra
- ITT XTRA and XP
- Kaypro 16
- Leading Edge
- NCR Model 4
- Olivetti M21 and M24 (with 48 TPI disk drives only)
- Panasonic Senior Partner
- Sanyo MBC-775
- Sperry
- Tandy 1000 (when optional DMA card is installed) and 1200
- Televideo AT
- and 1605 (with ROM version 2.4, earlier versions only ran
- executable distribution copy or floppy working copy
- made on another machine. Televideo will provide a
- ROM upgrade kit).
- Visual Commuter (must boot with PC-DOS)
- Wyse 1100
- Zenith 150 (floppy installation on A: drive only. ZENITH now
- offers a ROM update for its 150 series. It allows
- installation on both drives. Just call ZENITH and
- ask for update version 1.8A)
-
- ---------------- Special Cases ------------------------------
-
- The VICTOR VPC and WANG (with PC emulation card) will run an
- executable distribution copy and install to a hard disk; it
- does not install floppy working copies.
-
- The IBM PCjr and EPSON QX-16 will run an executable distribu
- tion copy and install to a hard disk if the distribution disk
- is duplicated on a Formaster machine. Disks made with SGCOPY
- are not supported.
-
- The GRID CASE will run an executable working distribution copy
- or working copy made on another machine. It does not support
- either hard disk or floppy disk installs.
-
- The DATA GENERAL 1 will run an executable 5-1/4 " distribution
- copy if the disk was made on a Formaster machine and the
- miniloader has been patched to disable logical drive
- assignments.
-
- The NORTHSTAR DIMENSION will run an executable distribution
- copy if duplicated on a Formaster machine. Disks made with
- SGCOPY are not supported.
-
- SUPERLoK can be customized to support the APRICOT, DGI (3-1/2"
- microfloppy), GRID CASE (3-1/2" microfloppy), MINDSET, TANDY
- 2000, and T.I. PROFESSIONAL. Available for site licensees and
- large volume dealers.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: VAL(<ESPC>)
- TEXT:
- The VAL() function correctly returns data as numeric for
- mathematical operations. However, it displays data like a
- string. The value is left justified, not right justified.
-
- Example:
-
- CLEAR
- @ 5,0 SAY "|----|----|----|----|----|----|----|"
- @ 6,0 SAY VAL("1")
-
- Output:
-
- CLIPPER
- -------
-
- |----|----|----|----|----|----|----|
- 1
-
- dBASE III
- --------
-
- |----|----|----|----|----|----|----|
- 1
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TYPE()
- TEXT:
- - i - a TYPE() done on an array name will return "A" for "Array"
- e.g.
- - declare ARRAY[10]
- - ? type("ARRAY") - * will return "A"
-
- - ii - a TYPE() done on an array element will return "U" for
- "Undefined" - regardless of any values assigned to it
- e.g.
- - ARRAY[1] = 25
- - ARRAY[2] = "Hello"
- - ? type("ARRAY[1]") - * will return "U"
- - ? type("ARRAY[2]") - * will return "U"
-
- - iii- on the other hand, if the array elements are assigned to
- variables, a TYPE() function done on the respective
- varaible will return the appropriate type:
-
- e.g.
- - ARRAY[1] = 25
- - ARRAY[2] = "Hello"
- - A = ARRAY[1]
- - B = ARRAY[2]
- - ? type("A") - * will return "N"
- - ? type("B") - * will return "C"
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: STR()
- TEXT:
- CLIPPER returns a different LEN() for the STR() of the
- RECNO().
-
- Example:
- ? LEN(STR(RECNO()))
-
- CLIPPER returns a value of 7
- dBASE III returns a value of 10
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: STR()
- TEXT:
- The STR() function does not return the same value as
- dBASE III when used with the DAY or YEAR functions.
-
- Example:
-
- ? LEN(STR(DAY(DATE()))
-
- dBASE III returns a value of 10. CLIPPER returns a value of 3.
-
- ? LEN(STR(YEAR(DATE()))
-
- dBASE III returns value of 10. CLIPPER returns a value of 5.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: MEMORY(0)
- TEXT:
- About CLIPPER AUTUMN'86's MEMORY(0) function vs the DOS CHKDSK:
-
- A lot of people have been wondering why at times the MEMORY(0)
- function would return a value that is far different from what
- CHKDSK would return. This is because the MEMORY(0) function
- returns only the memory available in Clipper's immediate
- "free pool" area. It does NOT return any buffer areas such as
- Index, Run, etc.
-
- Running CHKDSK, on the other hand, returns the memory available
- above the Clipper application program (any buffers reserved for
- the Clipper environment are cleared when CHKDSK is loaded and
- reinstated after its execution).
-
- | |
- | |
- | |
- T | (this area may | } What CHKDSK will return.
- O | contain some of |
- T | Clipper's Environment |
- A | setup...) |
- L | |
- | |
- M |-----------------------------|
- E | ----------- |
- M | | free <----------------- What MEMORY(0) will return.
- O | | pool | |
- R | ----------- |
- Y | |
- | Clipper Application |
- | |
- ---
- --------------------------
-
-
- e.g. (this program was tested on a 640K machine)
- clear
- declare A[2000],B[2000],C[2000],D[2000]
- ? memory(0) && may return 29K
- run chkdsk && may return 173K
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: MEMOEDIT()
- TEXT:
- The contents of a DBT file are handled in blocks of 512 bytes.
- Each memo field in a DBF file record contains the block number
- (in ASCII) which identifies the memo field data location. If
- the memo field contains no data, there is no number in the DBF
- file. When you write to the memo field, the next available
- block is used and its number is stored in the memo field of that
- record (invisibly behind the word 'memo').
- There is a difference between the way Clipper and dBase III
- handle changes to an exsiting memo field. When you change a
- memo field using dBASE III, the old contents remain in the DBT
- file. The changed contents are rewritten to the next available
- block, and the number in the DBF change to reflect the new
- location. This leaves the old block unused with no pointer to
- it in the DBF, which explains why DBT files grow to such a large
- size. Clipper continues using the same block until the whole
- 512 bytes are used. Clipper discards the block once it is full,
- copies its contents to the next available block and continues
- writing to the following block. The block pointer is then
- changed in the DBF. The following chart illustrates the differ-
- ences in DBT size:
- Resultant DBT File Size per DIR
-
- SUCCESSIVE ACTIVITIES CLIPPER dBASE III
- --------------------------------------------------------
-
- Create empty database 512 513
-
- First record processed
-
- add initial character 1026 515
-
- change initial character 1026 1027
-
- add second character 1027 1540
-
- Second record processed
-
- add initial character 1538 2051
-
- change initial character 1538 2563
-
- add second character 1539 3076
- -------------------------------------------------------
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: ISCOLOR()
- TEXT:
- The ISCOLOR() will return a .T. on a AT&T 6300 with a high
- resolution monochrome monitor.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: IF(<EXP1>,<ESP2>,<EXP3>)
- TEXT:
- Regardless of the validity of the first expression, the IF()
- function will still analyze the remaining two expressions. This
- is a problem when trying to use the IF() function to avoid
- Divide by Zero errors.
-
- Example:
-
- Y=0
- N=1
- ? IF(Y=0,0,N/Y)
- ? IF(Y<>0,N/Y,0)
-
- Y=1
- ? IF(Y=0,0,N/Y)
- ? IF(Y<>0,N/Y,0)
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INKEY()
- TEXT:
- The INKEY value of <control> END and <control> W is the same.
- They both return 23. But, they have different functions.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: FILE()
- TEXT:
- 1) The FILE() does not recognize hidden files.
- 2) The FILE() in CLIPPER will allow the use of wildcards
- when referring to files.
-
- Example:
- ? FILE("*.PRG") && will return .T. if any .PRG
- * files exist in directory.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: CTOD()
- TEXT:
- CLIPPER will not accept an invalid date in a CTOD().
- dBASE III will convert an invalid date to its proper
- equivalent. Also, CLIPPER will return the absolute value
- of a negative month.
-
- Example:
-
- ? CTOD("02\30\86")
- CLIPPER dBASE
- ------- -----
- " \ \ " "03\02\86"
-
- ? CTOD("02\-28\86")
- CLIPPER dBASE
- ------- -----
- "02\28\86" "01\03\86"
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: CTOD()
- TEXT:
- CLIPPER and dBASE III PLUS evaluate relational comparisons
- between dates differently if one of them is blank or empty.
- CLIPPER treats the blank date as less than the substantive
- one. dBASE illogically denies that either date exceeds the
- other or that they are equal.
- Example:
-
- date = CTOD('06/02/86')
- blank = CTOD(' / / ')
- dDBASE CLIPPER
- -------- --------
- ? date > blank .F. .T.
- ? date < blank .F. .F.
- ? date = blank .F. .F.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: CHR(N)
- TEXT:
- CLIPPER does not support the use of CHR(0), the null byte.
- This has its roots in the use of the null byte as the standard
- string terminator in the C language, in which CLIPPER is written
- and to whose standards it adheres. For example, if you assign
-
- x = "ABC" + CHR(0) + "DEF"
- ? LEN(x)
-
- the length function returns six, not seven. Similarly, if you
- try to send a string consisting of CHR(0) to a device, the
- CHR(0) itself is interpreted as the end of the string, so
- nothing is sent.
- In order to send CHR(0) to a printer, it must be sent by itself.
-
- Example:
- SET PRINTER ON
- ? CHR(0) + CHR(n) && the CHR(0) will not be sent
-
- Work-around:
- SET PRINTER ON
- ? CHR(0)
- ?? CHR(12) && this will be accepted by printer
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: &MACRO
- TEXT:
- The maximum amount of conditions in a MACRO is 15. On the 16th
- condition you will get a MACRO ERROR FAULT. The amount of
- conditions allowed is dependent on the complexity of the
- conditions. For example: When using ALIASES (->) the upper
- limit is 9. The 10th causes the error.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TOTAL TO <FILE> ON <KEY>
- TEXT:
- The TOTAL command requires that the fields being TOTALed
- are large enough to store the results of the TOTAL.
- AUTUMN '86 will return the error DATABASE NUMERIC OVERFLOW.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: TOTAL TO <FILE> ON <KEY>
- TEXT:
- The maximum number of fields to be TOTALED is 61 in WINTER '85
- and 120 in AUTUMN '86.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET RELATION
- TEXT:
- CLIPPER/dBASE have different interaction between
- SET RELATION ... INTO and SET FILTER TO
-
- If:
- - you USE a parent file,
- - SET RELATION ... INTO a child file on a field with the
- same name in both files, and
- - SET a FILTER condition on the child file,
-
- then,
-
- in dBASE - the child pointer, under control of the RELATION
- while the parent pointer is being manipulated, is allowed to
- land on records that fail the condition. Most other opera-
- tions on the child pointer, including a direct FIND or SEEK,
- are blind to these unqualified records. SET RELATION is an
- exception. This is mentioned in Ashton-Tate's Tech Notes
- journal, May 86 issue, p. 11.
-
- in CLIPPER - the child pointer in the same situation goes to
- EOF. Child pointer behavior in response to parent pointer
- movement is the same as in response to FIND and other
- commands, i.e., it respects the FILTER condition.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET PRINTER TO <DESTINATION>
- TEXT:
- dBASE will accept the statement SET PRINTER TO LPT1:. CLIPPER
- will issue a DOS ERROR 2 LPT1: NOT FOUND. CLIPPER interprets
- the colon to be part of a file name.
- The work-around is to eliminate the colon in the statement.
- SET PRINTER TO LPT1 will work.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET MESSAGE TO <N>
- TEXT:
- The line used in a SET MESSAGE TO <n> is reserved only for
- that command, and is not available for other displays.
-
- Example:
- SET MESSAGE TO 24
- @ ROW, COL PROMPT "XXXX" MESSAGE "XXXX"
- --source code--
- MENU TO
- --source code--
- @ 24, 5 PROMPT "PRINT THIS" && This will not appear on
- * the screen since line 24
- * is reserved for messages.
-
- Work-around:
- SET MESSAGE TO <nothing> will free that line.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET KEY TO
- TEXT:
- When calling a SET KEY TO procedure or the F1 help program from
- a WAIT TO <var> command, the variable name is not passed to the
- input_var PARAMETER.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET FUNCTION
- TEXT:
- If the function keys were set from DOS, then you can't
- set the function keys in CLIPPER. CLIPPER dosn't bypass
- what the keys were set to. If you clear the buffers before
- using an EXE, then they can be set.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET FORMAT TO
- TEXT:
- When using .CLP files with a program that has SET FORMAT TO
- statements, the .FMT files must have .PRG extensions and
- they must be included in the same .CLP file as the calling
- program. If they are not included the error message FATAL AT n
- ILLEGAL SYMBOL MODE will occur where n is the last line of the
- calling program.
-
- Another work-around is to declare the format files as externals
- by using the EXTERNAL command, then compile the format files in
- a seperate .CLP file.
-
- This has been fixed in AUTUMN '86.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET FILTER TO
- TEXT:
- When a MACRO is used to set a filter, the filter is changed
- whenever the macro variable is changed. In dBASE, the
- filter is retained in memory and the memory variable becomes
- available for other uses; but, in CLIPPER a reference is
- continually made to the variable when addressing the filter.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SET ESCAPE OFF
- TEXT:
- When an <esc> is entered from a MENU TO command, a zero is
- placed in the variable. SET ESCAPE does not affect this
- command.
-
- Work-around: Use the SET KEY command to nulify the <esc> key
-
- SET KEY 27 TO proc_name
- -source code -
- -etc.
-
- PROCEDURE proc_name
- PARAMETERS a,b,c
- RETURN
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: SELECT ALIAS
- TEXT:
- If an alias is SELECTed but never defined, CLIPPER will not
- issue an error message. A DELETE or REPLACE issued in
- this work area will result in a REC !IN NTX error message.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: REPLACE
- TEXT:
- dBASE III allows REPLACEment into a numeric field of a number
- too large to fit field specifications, if the specs include
- decimal places. CLIPPER WINTER '85 fills the field with
- asterisks. AUTUMN '86 will display the error "Database
- Numeric Overflow".
-
- Example:
- fieldname is defined as a numeric field 6 positions
- wide with 3 decimal places.
- var = 123456
- REPLACE fieldname WITH var
-
- Results- dBASE III = 123456
- CLIPPER = ******
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: RELEASE ALL
- TEXT:
- A variable declared PUBLIC can not be RELEASED with the RELEASE
- ALL statement.
- The PUBLIC statement takes precedence over the RELEASE statement.
- However, you can release a specified variable.
-
- Example:
- PUBLIC var
- RELEASE ALL
- ? var && var will = .F.
- RELEASE var
- ? var && var will be undefined.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: RANGE
- TEXT:
- If a variable is initialized to a value outside of the specified
- RANGE, CLIPPER will not allow you to keep this default value.
- dBASE will erroneously accept this value.
-
- Example: x = 5
- y = 10
- num = 0
- @ 2,10 GET num RANGE x,y
- READ && CLIPPER results in
- * out of range message
-
- Work-around:
- @ 2,10 GET num VALID ((num=0) .or. (num>=x .AND. num<=y))
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: PRIVATE ALL
- TEXT:
- The CLIPPER manual states non-support of the PRIVATE ALL
- command; however, the command will compile without an error
- message and create a PRIVATE variable named "ALL".
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: LOCATE
- TEXT:
- Although it is not documented, dBASE III will allow
- LOCATE RECORD n. CLIPPER will give the error message
- TYPE CONFLICT IN CONDITION.
-
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: LOCATE [<SCOPE>] [FOR/WHILE <CONDITION>]
- TEXT:
- The WHILE option in the LOCATE command requires a preceding FOR.
- Otherwise, a "TYPE CONFLICT IN CONDITION " error will occur.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: KEYBOARD
- TEXT:
- CLIPPER has a keyboard buffer limit of 16 characters.
- Utilities such as BIGBUF will not expand limitation.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: KEYBOARD
- TEXT:
- The following keys are not functional with the KEYBOARD
- command:
- HOME CHR(1), END CHR(6), CTRL PgUp CHR(30) and
- CTRL PGDN CHR(31).
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: KEYBOARD
- TEXT:
- The KEYBOARD command will not stuff the keyboard buffer with
- a negative number. For example, if you stuff the keyboard
- with a CHR(-1) , it will return a CHR(255).
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: JOIN
- TEXT:
- CLIPPER requires that you use alias arrows when listing fields
- outside the active file in USE. dBASE does not require them
- unless both work areas have duplicate field names.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INDEX ON
- TEXT:
- CLIPPER will allow indexing on a memo field if spaces
- are added to the index expression.
- Example: INDEX ON memfield + SPACE(100) TO mem_ntx
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INDEX ON
- TEXT:
- If you index just after the computer is turned on, the index
- time is much slower. But if you index immediately after,
- the speed will be faster. Apparently this has somthing to
- do with DOS. This test was done on a COMPAQ 286 with 640K RAM
- and DOS 3.0.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: INDEX ON
- TEXT:
- When INDEXing on a numeric field divided by another numeric, the
- runtime error "Divde by zero" will occur. This is because
- CLIPPER evaluates the length of an index on a blank record.
- A blank numeric field is a zero, resulting in the error.
-
- Work-around:
- INDEX ON the zero function illustrated in the
- READ_ME.1ST file under the REPORT FORM command.
- The decimal length of the index is determined by
- the RETURN statement in the function.
- Example:
- FUNCTION ZERO
- PARAMETERS znum1, znum2
- IF znum2 <> 0
- RETURN (znum1/znum2)
- ENDIF
- RETURN (0.00) && This sets the decimals
- * place to 2.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: FUNCTION <NAME>
- TEXT:
- CLIPPER will not allow the FUNCTION statement within an IF
- statement. The error "Unbalanced IF/ELSE" will occur.
- The same is true when creating a PROCEDURE.
-
- Example:
- IF Clipper
- FUNCTION funcname
- ---code---
- RETURN (X)
- ENDIF
-
- Work-around:
- IF Clipper
- DO procedure && which creates a function
- ENDIF
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: EJECT
- TEXT:
- Some printers , i.e. Citoh, do not recognize the EJECT command.
-
- Workaround: Instead of EJECT, do this procedure
-
- SET DEVICE TO PRINT
- SET CONSOLE OFF
- @ 0,0 SAY CHR(13)
- SET PRINT ON
- ?? CHR(12)
- SET PRINT OFF
- SET CONSOLE ON
- SET DEVICE TO SCREEN
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DO <PROCEDURE> WITH <PARAMETER LIST>
- TEXT:
- If a M->memvar is passed as a parameter, the memvar is passed
- by value. Any changes made in the called procedure will not
- change the original memvar. This is also true in dBASE but
- worth noting in this journal.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DO <PROC> WITH <PARAMETER LIST>
- TEXT:
- To pass a field to a procedure as a parameter, the fieldname
- must be in parenthesis. For example:
-
- DO IT WITH (sally)
-
- This passes the field (sally) to the procedure IT by value.
-
- PROCEDURE IT
- PARAMETER memvar
-
- (memvar) contains the image of (sally). Changing (memvar) will
- not change (sally).
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DO FILENAME
- TEXT:
- The official party-line limit on procedure name lengths is 10
- characters, same as dBASE. However, names up to and including 15
- characters seem to work.
-
- Problem: names 16 characters or greater cause compilation to halt
- abruptly on the DO <procedure name> command line. Neither Alt-C
- nor Ctrl-Break will unfreeze the system. Ctrl-Alt-Del will reset.
-
- Examples:
-
- ** This program can be compiled
- ? "hello"
- do A23456789012345
- ? "goodbye"
-
- procedure A23456789012345
- ? "I'm a subroutine"
- return
-
- ----------------------------------
-
- ** This program cannot be compiled
- ? "hello"
- do A234567890123456
- ? "goodbye"
-
- procedure A234567890123456
- ? "I'm a subroutine"
- return
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DO <FILENAME>
- TEXT:
- CLIPPER will not DO a file that begins with a number.
- All programs must begin with a letter or the error message
- ".PRG assumed external" will occur. However, if the
- main program begins with a number it can be compiled.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DECLARE - ARRAYS
- TEXT:
-
- Memory is allocated "dynamically" when using arrays.
- For example:
- If an array of 100 elements has been declared, a pointer
- is set from the memvar area to a small chunk of memory area
- where a reference to the array elements are kept. This
- array area is 22 bytes wide times the number of elements long.
- (See figure 1)
-
- If the values in the array elements are of type NUMERIC,
- they are stored within this area in their respective
- storage element area. (See figure 2)
-
- If the values were of type CHARACTER, a pointer is set from
- the storage element area of that array to any contiguous
- area of memory that can hold that string. (See figure 3)
-
- figure 1:
- memvar area
- ------------------ 22 bytes
- | | <--long-->
- ------------------ |-----------|
-
- ------------------ |-----------| Array(100)
- | | |-----------| |
- ------------------ |-----------| |
- | Array(100) | ------> |-----------|
- ------------------ |-----------|
- | | |-----------|
- | |
-
-
-
- figure 2:
-
- 22 bytes long
- ------------------
- | 1) | Array(2) = 75
- ------------------ Array(3) = 40
- | 2) 75 |
- | ------------------
- Array(100) | 3) 40 |
- | ------------------
- | | 4) |
- ------------------
- | |
-
-
-
-
- figure 3:
-
- ---------------
- 22 bytes long ----> | "Hello There" |
- ------------------ | ---------------
- | 1) | ------------
- ------------------
- | 2) 75 |
- | ------------------ Array(1) = "Hello There"
- Array(100 | 3) 40 | Array(4) = "Waz Happenin..."
- | ------------------
- | | 4) | -----
- ------------------ |
- | | | -------------------
- ---------> | "Waz Happenin..." |
-
- -------------------
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: DECLARE <ARRAY NAME> [EXPN]
- TEXT:
-
- When GETting array elements from a loop, the VALID option will
- only work on the array element to which the variable indexing the
- array is assigned. In the following example, only array
- element five will honor the VALID statement.
-
- Example:
-
- DECLARE ARR[7]
- FOR X = 1 TO 7
- ARR[X] = 'A'
- NEXT
- col = 24
- FOR X = 1 TO 7
- @ ROW() + 1 , col GET ARR[X] VALID (ARR[X] $ "AB")
- NEXT
- x = 5
- READ
- RETURN
- *** Note: The RANGE option will work with numerics.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: COPY FILE
- TEXT:
-
- Command.com must be available to the default drive when issuing
- this command.
-
- Example:
- COPY FILE a:filename TO b:filename
- if A: is the default drive then Command.com must be
- on that drive.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: APPEND FROM <FILENAME> [FOR/WHILE <CONDITION>]
- TEXT:
- When appending from a file with a FOR/WHILE condition, CLIPPER
- requires that the fields referred to in the condition are
- present in both files. CLIPPER will not append any records,
- but dBASE will accept it. Also, the fields must be of the
- same type. Otherwise, TYPE CONFLICT IN REPLACE will occur.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: APPEND FROM <FILENAME>
- TEXT:
- If you go into dBASE III, use a .DBF, delete records from there,
- pack it, and then go into Clipper and then append from that file,
- Clipper may add those deleted records.
-
- The above happens because after a PACK transaction, dBASE does
- not reset DOS's eof marker, and Clipper (which reads to DOS's eof)
- will add those "deleted/packed" records. You can avoid this
- problem by:
-
- 1 - doing ALL your file processing in Clipper, or
-
- 2 - if you have to go into dBASE, then the minute you get
- back into Clipper, open the file and then close it before
- you do any type of transaction. This ensures that the
- DOS eof marker is reset to the real end-of-file.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: @ ROW, COL SAY <EXP> GET <EXP>
- TEXT:
- If a row greater than 24 is specified, no error message will
- be displayed. Instead, the cursor will go to the bottom of
- the screen and the program will hang.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: @ [EXPN],[EXPN] SAY [EXPC] PICT [PICT. LIST]
- TEXT:
- A PICTURE clause that uses the 9 or # symbol but specifies no
- decimal position causes the decimal position of a numeric [exp]
- to be rounded. dBASE III instead truncates it.
-
- Example:
- x = 2.6
- @ 10,10 SAY x PICT "9"
-
- ********* Output ********
-
- dBASE III CLIPPER
-
- 2 3
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: '!=='
- TEXT:
- The exclamation mark used with the double equal sign will
- not work. The error MACRO ERROR EXPRESSION will occur.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: APPEND FROM <FILENAME>
- TEXT:
- If you go into dBASE III, use a .DBF, delete records from there,
- pack it, and then go into Clipper and then append from that file,
- Clipper may add those deleted records.
-
- The above happens because after a PACK transaction, dBASE does
- not reset DOS's eof marker, and Clipper (which reads to DOS's eof)
- will add those "deleted/packed" records. You can avoid this
- problem by:
-
- 1 - doing ALL your file processing in Clipper, or
-
- 2 - if you have to go into dBASE, then the minute you get
- back into Clipper, open the file and then close it before
- you do any type of transaction. This ensures that the
- DOS eof marker is reset to the real end-of-file.
-
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: @ ROW, COL SAY <EXP> GET <EXP>
- TEXT:
- If a row greater than 24 is specified, no error message will
- be displayed. Instead, the cursor will go to the bottom of
- the screen and the program will hang.
-
-
- PUBLISHED: 16 Dec 1986
- MAIN_TOPICS: @ [EXPN],[EXPN] SAY [EXPC] PICT [PICT. LIST]
- TEXT:
- A PICTURE clause that uses the 9 or # symbol but specifies no
- decimal position causes the decimal position of a numeric [exp]
- to be rounded. dBASE III instead truncates it.
-
- Example:
- x = 2.6
- @ 10,10 SAY x PICT "9"
-
- ********* Output ********
-
-
- dBASE III CLIPPER
-
- 2 3
-